var timer = null
var count = 0
var defaultSpaceTime = 4000 // 默认时间
var spaceTime = defaultSpaceTime
var words = {} //初始化

var graybars = []//成员数组

;(function () {
  timer = setInterval(observeMessage, defaultSpaceTime)
  // setTimeout(()=>{
  //   sendMessage('小奕开机了，同学们有问题可用以 【“小奕” + 空格（可选） + 问题】或者 【直接@小奕】 向我提问哦！')
  // },0)
})();

function clearData() {
  if (timer) clearInterval(timer)
  timer = setInterval(observeMessage, spaceTime)
}

function observeMessage() {
  try {
    var msg = observePageMsg();
    welcomeNewMember()//迎新
    if (msg) {
      manageSpaceTime(msg) //控制间隔时间
      detailMessage(msg);
    }
  } catch (e) {
    log(e)
  }
}


//控制间隔时间
function manageSpaceTime(msg) { 
  if (!words[msg]) {
    words = {}
    words[msg] = [Math.floor(+(new Date()) / 1000)]
    words[msg].count = 1
    //重新开始处理
    spaceTime = 2000
    clearData()
  } else { //查询是否一直重复
    var word = words[msg]
    if (word.count > 3) {
      var wordTimeLength = word.length
      var startIndex = Math.floor(wordTimeLength / 2)
      var doForFlag = 1
      for (var i = startIndex; i < wordTimeLength - 1 && doForFlag; i++) {
        var difValue = word[i + 1] - word[i]
        var thisSpaceTime = spaceTime / 1000
        // log('直接时间差为：', difValue, thisSpaceTime)
        if (difValue - thisSpaceTime > 0.5 || difValue - thisSpaceTime < -0.5) {
          //时间间隔不等于 spaceTime
          doForFlag = 0
          // log('时间差为：', difValue, thisSpaceTime)
        }
      }
      if (doForFlag) {
        log('一直在循环')
        spaceTime = defaultSpaceTime
        clearData()
        return
      }
    }
    //识别成功，直接插入
    word.push(Math.floor(+(new Date()) / 1000))
    word.count++
  }
  return true
}

// qq聊天界面监听对方消息
function observePageMsg() {
  // 获取聊天页面最后一个头像元素的left坐标
  var avatorElements = id("chat_item_head_icon").untilFind();
  var textElements = id("chat_item_content_layout").untilFind();
  var left = avatorElements[avatorElements.length - 1].bounds().left;
  var dom = textElements[avatorElements.length - 1]
  var text = (dom && dom.text()) || '';

  // 最后一条消息来自对方
  if (left < 500) {
    return text;
  }
  return;
}

// 处理数据
function detailMessage(herMsg) {
  var prefix
  var question
  var herMsgInstruction
  var otherPrefixStr = ['@宏奕机器人（小奕）']
  if(herMsg.indexOf(otherPrefixStr[0]) !== -1) {
    prefix = '小奕'
    herMsgInstruction = herMsg.replace(/@宏奕机器人（小奕）/, '')
  }else {
    prefix = herMsg.slice(0, 2) // 前三位
    herMsgInstruction = herMsg.slice(2) // 三位后
  }
  question = herMsgInstruction.trim()
  getReply(prefix, question) //获取回复得回调函数
}

//发送消息，注意，其实是这里要加锁
function sendMessage(sendStr) {
  var lastStr = editable(true).findOne().text()
  if(lastStr !== sendStr) { //直接取消不发送
    input(0, sendStr);
    click("发送", 0)
  }
}

//迎新函数
function welcomeNewMember() {
  var graybarArr = id("graybar").className("android.widget.TextView").find()
  var graybarArrLength = graybarArr.length

  var firstGraybar = graybarArr[0] //获取第一个
  if(firstGraybar) {
    var firstIndex = graybars.indexOf(regExpNewMember(firstGraybar.text())) //匹配获取成员名称
    if(firstIndex !== -1 && firstIndex > 3) graybars = graybars.slice(firstIndex)
  }

  for(var i=0; i<graybarArrLength; i++) {
    var textValue = graybarArr[i].text()

    var inviteder //受邀请人
    inviteder = regExpNewMember(textValue) //匹配获取成员名称
    
    if(inviteder) {//如果匹配到
      var flag = graybars.some((graybar)=>{
        return graybar === inviteder
      })
      if(!flag) { //不重复的化
        log("欢迎：" + inviteder)
        sendMessage('@' + inviteder + getWelcomeWords())
        graybars.push(inviteder)
      }
    }
  }
}

//随机的欢迎
function getWelcomeWords() {
  var wordsArr = [
    '：欢迎来到宏奕招新群，我们在这等候你多时啦！',
    '：这里 宏奕~ 终于等到你~',
    '：欢迎欢迎~ 恭喜你加入一个宝藏群~',
  ]
  var randomIndex = Math.floor(Math.random()*wordsArr.length)
  return  wordsArr[randomIndex]
}


//获取匹配的机制
function regExpNewMember(textValue) {
  var inviteder //受邀请人
  var regexp1 = /^([\S|\s]+)邀请([\S|\s]+)加入了本群[\S|\s]*$/
  var regexp2 = /^([\S|\s]+)通过扫描([\S|\s]+)分享的二维码加入了本群[\S|\s]*$/
  var regexp4 = /^([\S|\s]+)加入了本群[\S|\s]*$/
  var regexp3 = /^([\S|\s]+)加入本群[\S|\s]*$/
  

  var regexpResultOne = textValue.match(regexp1)
  var regexpResultTwo = textValue.match(regexp2)
  var regexpResultThird = textValue.match(regexp3)
  var regexpResultForth = textValue.match(regexp4)
  
  if(regexpResultOne) {
    inviteder = regexpResultOne[2] //受邀请人
  }else if(regexpResultTwo){
    inviteder = regexpResultTwo[1] //扫码受邀请人
  }else if(regexpResultThird){
    inviteder = regexpResultThird[1] //申请人
  }else if(regexpResultForth){
    inviteder = regexpResultForth[1] //申请人
  }

  return inviteder
}

// API 获取回复函数
function getReply(prefix, question) {
  var API = '192.168.1.108'
  var URL = 'http://' + API + ':7777/api/v1/dictionaries'
  var att = enSerialize({
    prefix: prefix, question: question
  })
  http.get(URL + att, {}, function (res, err) {
    if(err) {
      sendMessage('小奕服务器好像断开连接了诶，我叫爸爸帮我练一下，请稍等呢！')
      log(err); return
    }

    res = res.body.json() //获取响应外层数据
    if (res && res.status === 'success') {
      var dictionaries = res.data.dictionaries
      for (var i = 0; i < dictionaries.length; i++) {
        var dictionary = dictionaries[i]
        sendMessage(dictionary.description)
      }
    } else {
      log('数据库未处理')
    }
  })
}

//处理get请求参数
function enSerialize(obj) {
  //判别类型
  if (typeof obj !== 'object') return '';
  var resultStr = '';
  for (var pro in obj) {
    //单层遍历 一般只需要单层 ， 多层次 用树的前序遍历
    if (typeof obj[pro] === 'object') return '';
    resultStr += pro + '=' + obj[pro] + '&';
  }
  return '?' + resultStr.slice(0, -1);
}